const path = require("path")
// 引入js压缩插件
const uglify = require("uglifyjs-webpack-plugin")
// 引入html打包插件
const htmlPlugin = require("html-webpack-plugin")
// css 分离
const extractTextPlugin = require("extract-text-webpack-plugin")

var website = {
    // 这里的IP和端口，是你本机的ip或者是你devServer配置的IP和端口
    publicPath: 'http://localhost:8888/'
}

module.exports = {
    mode: 'development',
    // 入口配置文件
    entry: {
        // 里面的main是可以随便写的
        main: './src/main.js',
        main2: './src/main2.js'
    },
    // 出口配置文件
    output: {
        path: path.resolve(__dirname, "../dist"),
        // 打包文件的名称
        filename: '[name].js',
        // publicPath: 主要作用就是处理静态文件路径的
        publicPath: website.publicPath
    },
    // 模块：例如解读CSS，图片如何转换压缩
    module: {
        rules: [
            // css loader
            {
                test: /\.css$/,
                use: extractTextPlugin.extract({
                    fallback: 'style-loader',
                    use: "css-loader"
                })
                // css 分离后这里需要重新配置，下面注释了
                // use: [
                //     { loader: "style-loader" },
                //     { loader: "css-loader" }
                // ]
            },
            // 图片loader
            {
                // 是匹配图片文件后缀名称
                test: /\.(png|jpg|gif|jpeg)/,
                use: {
                    // 指定使用的loader和loader的配置参数
                    loader: 'url-loader',
                    options: {
                        // 是把小于500B的文件打成base64的格式，写入JS
                        limit: 500,
                        // 打包后的图片放到images文件夹下
                        outputPath: 'images/'
                    }
                }
            },
            {
                test: /\.(html|htm)$/i,
                use: ['html-withimg-loader']
            },
            {
                test: /\.less$/,
                use: extractTextPlugin.extract({
                    use: [
                        {
                            loader: "css-loader"
                        },
                        {
                            loader: 'less-loader'
                        }
                    ],
                    fallback: 'style-loader'
                })
            },
            {
                test: /\.scss$/,
                use: extractTextPlugin.extract({
                    use: [
                        {
                            loader: "css-loader"
                        },
                        {
                            loader: 'sass-loader'
                        }
                    ],
                    fallback: 'style-loader'
                })
            },
            // babel 配置
            {
                test: /\.(jsx|js)$/,
                use: {
                    loader: 'babel-loader',
                },
                exclude: /node_modules/
            }
        ]
    },
    // 插件，用于生产模块和各项功能
    plugins: [
        new uglify(),
        new htmlPlugin({
            // 是对html文件进行压缩
            minify: {
                // removeAttributeQuotes是却属性的双引号
                removeAttributeQuotes: true
            },
            // 为了开发中js有缓存效果，所以加入hash，这样可以有效避免缓存JS。
            hash: true,
            // 是要打包的html模板路径和文件名称
            template: './src/index.html'
        }),
        // 这里的/css/index.css 是分离后的路径
        new extractTextPlugin("css/index.css")
    ],
    // 配置webpack开发服务功能
    devServer: {
        // 设置基本目录结构
        contentBase: path.resolve(__dirname, "../dist"),
        // 服务器的IP地址，可以使用IP也可以使用localhost
        host: 'localhost',
        // 服务端压缩是否开启
        compress: true,
        // 配置服务端端口号
        port: 8888
    }
}